//
//  UserAccountViewModel.swift
//  weibo001
//
//  Created by ios on 15/11/8.
//  Copyright © 2015年 ios. All rights reserved.
//

import Foundation


// 用户帐号试图模型 - 没有父类  量级更轻  封装业务逻辑，不用来存储数据

class UserAccountViewModel {

    var account: UserAccount?
 
    static let sharedUserAccount = UserAccountViewModel()

    // 返回有效的token
    
    var accessToken: String? {
        if !isExpried {
        
        return account?.access_token
        }
   
        return nil
    }
    // 判断时间是否过期
    private  var isExpried: Bool {
        
        if account?.expires_date?.compare(NSDate()) == NSComparisonResult.OrderedDescending{
            
            return false
            
        }
        
        return true
    }

    
    //  用户登录
    var UserLogin: Bool {
        
        return  account?.access_token != nil && isExpried
        
    }
    
    
    //用户头像 URL
    var avatar:NSURL {
    
    return NSURL(string: account?.avatar_large ?? "")!
    }
    
    
    //   归档保存路径
    
    private var accountPath: String {
        
        let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
        
        print(path)
        return (path as NSString).stringByAppendingPathComponent("account.plist")
        
        
        
    }
    
    
    
  private  init() {
    // 从沙盒中加载用户账户信息
        
       account = NSKeyedUnarchiver.unarchiveObjectWithFile(accountPath) as? UserAccount

//        if isExpried {
//        print("已经过期")
//        
//          account = nil
//        }
    
       // print(account)
    }
    
    
}



extension UserAccountViewModel {
 
    func loadAccessToken(code:String,finshed:(isSuccessed:Bool)->()) {
    

        //加载  accessToken
        
        NetworkTool.sharedTools.loadAccessToken(code) { (result, error) -> () in
            
            if error != nil {
                print("出错了")
               
                finshed(isSuccessed: false)
                return
            }
            print(result)
            
            // 2> 输出结果 － 在 Swift 中任何 AnyObject 在使用前，必须转换类型 -> as ?/! 类型
             self.account = UserAccount(dict: result as! [String:AnyObject])
            
           self.loadUserInfo(self.account!, finshed: finshed)
            
        }
        
    }
  
    private func loadUserInfo(account:UserAccount,finshed:(isSuccessed:Bool)->()) {
        
        NetworkTool.sharedTools.loadUserInfo(account.uid!, accessToken: account.access_token!) { (result, error) -> () in
            if error != nil {
                print(error)
                finshed(isSuccessed: false)
                
            }
            // 提示：如果使用 if let / guard let 统统使用 `?`
            // 作了两个判断
            // 1. result 一定有内容
            // 2. 一定是字典
            guard let dict = result as? [String:AnyObject] else {
                print("格式错误")
                finshed(isSuccessed: false)
                return
            }
            
            // 将用户信息保存    添加到模型中
            account.screen_name = dict["screen_name"] as? String
            account.avatar_large = dict["avatar_large"] as? String
            
            // 保存对象 － 会调用对象的 encodeWithCoder 方法
            NSKeyedArchiver.archiveRootObject(account, toFile: self.accountPath)
            print(self.account)
            
            finshed(isSuccessed: true)
            
        }
        
    }

    

}












